<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<script>
// 在async函数中执行到await时，会跳出当前函数执行流（暂停执行），等到async函数后面的同步程序执行完成后，再回到async函数中执行剩余的程序

// 微队列：[f3]
// 宏队列：[f1]
// 执行栈：
// console.log( 4 );
// setTimeout(); f1加入宏队列
// async1();
    // console.log( 1 );
    // async2();
        // console.log( 3 );
    // async2执行完成后返回一个成功状态的Promise对象
    // await 成功状态的Promise对象; 暂停执行async1剩余的程序

// new Promise();
// f2();
//     console.log( 6 );
//     resolve(); f3加入微队列
// console.log( 8 );
// JS引擎空闲了，回调之前暂停执行的async函数内部继续执行后面的程序
// console.log( 2 );
// JS引擎空闲了，优先处理微任务
// f3();
    // console.log( 7 );
// JS引擎空闲了，处理宏任务
// f1();
    // console.log( 5 );

// 4 1 3 6 8 2 7 5
/* async function async1(){
    console.log( 1 );
    await async2();// 暂停执行async1剩余的程序  类似于 p1.then(()=>{})
    console.log( 2 );
}
async function async2(){
    console.log( 3 );
}
console.log( 4 );
setTimeout(()=>{// f1
    console.log( 5 );
},0);
async1();
new Promise((resolve,reject)=>{// f2
    console.log( 6 );
    resolve();
})
.then(()=>{// f3
    console.log( 7 );
})
console.log( 8 ); */


// async function fn(){
//     console.log( 1 )
//     await new Promise((resolve,reject)=>{
//         console.log( 2 )
//         resolve()
//     })
//     console.log( 3 )
// }
// fn();
// console.log( 4 );

</script>
</body>
</html>